home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / LITTLE / P3SRC.ZIP / ATARI / CAMERA.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-06  |  5.6 KB  |  332 lines

  1. /****************************************************************************
  2. *                camera.c
  3. *
  4. *  This module implements methods for managing the viewpoint.
  5. *
  6. *  from Persistence of Vision(tm) Ray Tracer
  7. *  Copyright 1996 Persistence of Vision Team
  8. *---------------------------------------------------------------------------
  9. *  NOTICE: This source code file is provided so that users may experiment
  10. *  with enhancements to POV-Ray and to port the software to platforms other 
  11. *  than those supported by the POV-Ray Team.  There are strict rules under
  12. *  which you are permitted to use this file.  The rules are in the file
  13. *  named POVLEGAL.DOC which should be distributed with this file. If 
  14. *  POVLEGAL.DOC is not available or for more info please contact the POV-Ray
  15. *  Team Coordinator by leaving a message in CompuServe's Graphics Developer's
  16. *  Forum.  The latest version of POV-Ray may be found there as well.
  17. *
  18. * This program is based on the popular DKB raytracer version 2.12.
  19. * DKBTrace was originally written by David K. Buck.
  20. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  21. *
  22. *****************************************************************************/
  23.  
  24. #include "frame.h"
  25. #include "vector.h"
  26. #include "povproto.h"
  27. #include "camera.h"
  28. #include "matrices.h"
  29. #include "normal.h"
  30.  
  31.  
  32.  
  33. /*****************************************************************************
  34. *
  35. * FUNCTION
  36. *
  37. *   Translate_Camera
  38. *
  39. * INPUT
  40. *   
  41. * OUTPUT
  42. *   
  43. * RETURNS
  44. *   
  45. * AUTHOR
  46. *
  47. *   POV-Ray Team
  48. *   
  49. * DESCRIPTION
  50. *
  51. *   -
  52. *
  53. * CHANGES
  54. *
  55. *   -
  56. *
  57. ******************************************************************************/
  58.  
  59. void Translate_Camera(Camera, Vector)
  60. CAMERA *Camera;
  61. VECTOR Vector;
  62. {
  63.   VAddEq(((CAMERA *)Camera)->Location, Vector);
  64. }
  65.  
  66.  
  67.  
  68. /*****************************************************************************
  69. *
  70. * FUNCTION
  71. *
  72. *   Rotate_Camera
  73. *
  74. * INPUT
  75. *   
  76. * OUTPUT
  77. *   
  78. * RETURNS
  79. *   
  80. * AUTHOR
  81. *
  82. *   POV-Ray Team
  83. *   
  84. * DESCRIPTION
  85. *
  86. *   -
  87. *
  88. * CHANGES
  89. *
  90. *   -
  91. *
  92. ******************************************************************************/
  93.  
  94. void Rotate_Camera(Camera, Vector)
  95. CAMERA *Camera;
  96. VECTOR Vector;
  97. {
  98.   TRANSFORM Trans;
  99.   
  100.   Compute_Rotation_Transform(&Trans, Vector);
  101.   
  102.   Transform_Camera(Camera, &Trans);
  103. }
  104.  
  105.  
  106.  
  107. /*****************************************************************************
  108. *
  109. * FUNCTION
  110. *
  111. *   Scale_Camera
  112. *
  113. * INPUT
  114. *   
  115. * OUTPUT
  116. *   
  117. * RETURNS
  118. *   
  119. * AUTHOR
  120. *
  121. *   POV-Ray Team
  122. *   
  123. * DESCRIPTION
  124. *
  125. *   -
  126. *
  127. * CHANGES
  128. *
  129. *   -
  130. *
  131. ******************************************************************************/
  132.  
  133. void Scale_Camera(Camera, Vector)
  134. CAMERA *Camera;
  135. VECTOR Vector;
  136. {
  137.   TRANSFORM Trans;
  138.   
  139.   Compute_Scaling_Transform(&Trans, Vector);
  140.   
  141.   Transform_Camera(Camera, &Trans);
  142. }
  143.  
  144.  
  145.  
  146. /*****************************************************************************
  147. *
  148. * FUNCTION
  149. *
  150. *   Transform_Camera
  151. *
  152. * INPUT
  153. *   
  154. * OUTPUT
  155. *   
  156. * RETURNS
  157. *   
  158. * AUTHOR
  159. *
  160. *   POV-Ray Team
  161. *   
  162. * DESCRIPTION
  163. *
  164. *   -
  165. *
  166. * CHANGES
  167. *
  168. *   -
  169. *
  170. ******************************************************************************/
  171.  
  172. void Transform_Camera(Camera, Trans)
  173. CAMERA *Camera;
  174. TRANSFORM *Trans;
  175. {
  176.   MTransPoint(Camera->Location, Camera->Location, Trans);
  177.   
  178.   MTransPoint(Camera->Direction, Camera->Direction, Trans);
  179.   
  180.   MTransPoint(Camera->Up, Camera->Up, Trans);
  181.   
  182.   MTransPoint(Camera->Right, Camera->Right, Trans);
  183. }
  184.  
  185.  
  186.  
  187. /*****************************************************************************
  188. *
  189. * FUNCTION
  190. *
  191. *   Create_Camera
  192. *
  193. * INPUT
  194. *   
  195. * OUTPUT
  196. *   
  197. * RETURNS
  198. *   
  199. * AUTHOR
  200. *
  201. *   POV-Ray Team
  202. *   
  203. * DESCRIPTION
  204. *
  205. *   -
  206. *
  207. * CHANGES
  208. *
  209. *   -
  210. *
  211. ******************************************************************************/
  212.  
  213. CAMERA *Create_Camera()
  214. {
  215.   CAMERA *New;
  216.   
  217.   New = (CAMERA *)POV_MALLOC(sizeof (CAMERA), "camera");
  218.   
  219.   Make_Vector(New->Location,  0.0,  0.0, 0.0);
  220.   Make_Vector(New->Direction, 0.0,  0.0, 1.0);
  221.   Make_Vector(New->Up,        0.0,  1.0, 0.0);
  222.   Make_Vector(New->Right,     1.33, 0.0, 0.0);
  223.   Make_Vector(New->Sky,       0.0,  1.0, 0.0);
  224.   Make_Vector(New->Look_At,   0.0,  0.0, 1.0);
  225.  
  226.   /* Init focal blur stuff (not used by default). */
  227.  
  228.   New->Blur_Samples   = 0;
  229.   New->Confidence     = 0.9;
  230.   New->Variance       = 1.0 / 128.0;
  231.   New->Aperture       = 0.0;
  232.   New->Focal_Distance = -1.0;
  233.  
  234.   /* Set default camera type and viewing angle. [DB 7/94] */
  235.  
  236.   New->Type = PERSPECTIVE_CAMERA;
  237.  
  238.   New->Angle = 90.0;
  239.  
  240.   /* Do not perturb primary rays by default. [DB 7/94] */
  241.  
  242.   New->Tnormal = NULL;
  243.  
  244.   return (New);
  245. }
  246.  
  247.  
  248.  
  249. /*****************************************************************************
  250. *
  251. * FUNCTION
  252. *
  253. *   Copy_Camera
  254. *
  255. * INPUT
  256. *
  257. * OUTPUT
  258. *
  259. * RETURNS
  260. *
  261. * AUTHOR
  262. *
  263. *   POV-Ray Team
  264. *
  265. * DESCRIPTION
  266. *
  267. *   -
  268. *
  269. * CHANGES
  270. *
  271. *   -
  272. *
  273. ******************************************************************************/
  274.  
  275. CAMERA *Copy_Camera(Old)
  276. CAMERA *Old;
  277. {
  278.   CAMERA *New;
  279.  
  280.   if (Old != NULL)
  281.   {
  282.     New = Create_Camera();
  283.  
  284.     *New = *Old;
  285.   }
  286.   else
  287.   {
  288.     New = NULL;
  289.   }
  290.  
  291.   return (New);
  292. }
  293.  
  294.  
  295.  
  296. /*****************************************************************************
  297. *
  298. * FUNCTION
  299. *
  300. *   Destroy_Camera
  301. *
  302. * INPUT
  303. *
  304. * OUTPUT
  305. *
  306. * RETURNS
  307. *
  308. * AUTHOR
  309. *
  310. *   Dieter Bayer
  311. *
  312. * DESCRIPTION
  313. *
  314. *   -
  315. *
  316. * CHANGES
  317. *
  318. *   -
  319. *
  320. ******************************************************************************/
  321.  
  322. void Destroy_Camera(Camera)
  323. CAMERA *Camera;
  324. {
  325.   if (Camera != NULL)
  326.   {
  327.     Destroy_Tnormal(Camera->Tnormal);
  328.  
  329.     POV_FREE(Camera);
  330.   }
  331. }
  332.